package gest;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
import java.util.StringTokenizer;

public class CriarEspecialidades {
	
	static Scanner in = new Scanner (System.in);
	
	static Registry reg;
	static Gestao g = null;
	static Especialidade es;
	String ficheiro;
	
	public CriarEspecialidades(){
		try {
			reg = LocateRegistry.getRegistry();
			g = (Gestao) reg.lookup("GestaoReceitas");
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		}
		g= new Gestao_Impl();		
	}
	
	public CriarEspecialidades(String n, String comp) throws IOException{
		if(comp.equals("-f")){
			try {
				reg = LocateRegistry.getRegistry();
				g = (Gestao) reg.lookup("GestaoReceitas");
			} catch (RemoteException e) {
				e.printStackTrace();
			} catch (NotBoundException e) {
				e.printStackTrace();
			}
			this.ficheiro = n;
			g = new Gestao_Impl();
			BufferedReader br = new BufferedReader (new FileReader (this.ficheiro));
			StringTokenizer st = null;
			String teste;
			while((teste = br.readLine()) != null){
				st = new StringTokenizer(teste, ";");
				String nome = st.nextToken();
				es = g.cria_especialidade(nome.toUpperCase());	
				imprimeinfo();
			}			
		}
		else if(comp.equals("-v")){
			try {
				reg = LocateRegistry.getRegistry();
				g = (Gestao) reg.lookup("GestaoReceitas");
			} catch (RemoteException e) {
				e.printStackTrace();
			} catch (NotBoundException e) {
				e.printStackTrace();
			}
			g = new Gestao_Impl();
			es = g.cria_especialidade(n.toUpperCase());				
		}else System.out.println("Invalido");
	}

	public static void main(String[] args){
		if(args[0].equals("-v")){			
			try {
				new CriarEspecialidades(args[1],args[0]);
				imprimeinfo();
				System.exit(0);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		else if (args[0].equals("-f")){
			try {
				new CriarEspecialidades(args[1],args[0]);
				System.exit(0);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		else if(args[0].equals("-i")){
			CriarEspecialidades ce = new CriarEspecialidades();
			CriarEspecialidades.criar();
			CriarEspecialidades.resposta();
		}
		else System.out.println("Atributos Incorrectos");
	}
	
	private static void imprimeinfo(){
		try {
			System.out.println(es.get_nome()+" "+es.get_id());
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}
	
	private static void criar(){
		System.out.println("Inserir especialidade");
		try {			
			String a = in.nextLine();
			es = g.cria_especialidade(a);
		} catch (RemoteException e) {
			System.out.println("Falha de Ligação");
			e.printStackTrace();
		}		
	}

	private static void inserirnome() {
		System.out.println("Insira o nome:");
		String nome = in.nextLine();
		try {
			es.set_nome(nome);
			System.out.println("Informação Actuaizada!!");
		} catch (RemoteException e) {
			e.getStackTrace();
		}	
	}

	private static void info() {
		System.out.println("Deseja Alterar alguma informação:");
		System.out.println("1 - nome");
		System.out.println("2 - ver dados");
		System.out.println("3 - sair");	
	}
	
	private static void resposta(){
		info();
		int a=0;
		try{
			a = Integer.parseInt(in.nextLine());
			switch(a){
			case 1:
				inserirnome();
				resposta();
				break;
			case 2:
				imprimeinfo();
				resposta();
				break;
			case 3:
				System.exit(0);
				break;
			default:
				resposta();
				break;
			}
		}catch(java.lang.NumberFormatException e){
			System.out.println("Opcção inválida!!!!");
			resposta();
		}
	}
	
}
